<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // 1.用户输入一个整数n,计算阶乘之和
        var n = prompt("请输入一个整数n");
        var sum = 0;
        var mix = 1;
        if(n >= 1){
        for (i = 0;i < n ;n-- ){
                mix *= n;
                sum += mix;
            }
        }
        console.log(sum);
        // 2.求一个三位数，叫做“喇叭花数”，该三位数等与其每位数字的阶乘之和。输出100~999的所有喇叭花数
        for(i = 100;i <= 999; i ++){
        var ge = i % 10;
        var ge1 = 1;
        var shi =parseInt(i / 10) % 10;
        var shi1 = 1;
        var bai =parseInt(i / 100);
        var bai1 = 1;
        for (var n = 0;n < ge; ge--){
            ge1 *= ge;
        }
        for (var n = 0;n < shi; shi--){
            shi1 *= shi;
        }
        for (var n = 0;n < bai; bai--){
            bai1 *= bai;
        }
        if(i === ge1 + shi1 +bai1){
            console.log(i);
        }
        }
        // 3.验证哥德巴赫猜想。一个偶数可以拆分成两个质数之和。
        var n3 = prompt("请输入一个偶数");
        var zhishu = [];
        // 找出2到n之间所有的质数
        for(i = 2;i < n3 - 1 ; i++) {
            for( var j = 2;j <= i ;j++){
            if(i % j == 0 ){
                if(i !== j){
                    break;
                }else{
                    zhishu[zhishu.length] = i;
                }
            }
            }
        }
        for(var i = 0;i < zhishu.length;i ++){
            if(zhishu.indexOf(n3 - zhishu[i]) > -1){
                console.log("拆分为" + zhishu[i] + "和" + (n3 -zhishu[i]))
            }
        }
        // 4. 编写函数rev(char) 实现将字符串char倒置，比如rev("spring") 返回"gnirps"
        function rev(char){
            var char1 = char.split("");
            char1.reverse();
            char = char1.join("");
            console.log(char);
        }
        var n4 = ("" + prompt("请输入一句话"));
        var daozhi = rev(n4);
        // 5. 将字符串"i come from beijing"倒置，即控制台输出"beijing from come i"语句直接写在程序中，不需要用户输入
        var n5 = ("i come from beijing");
        var daozhi1 = n5.split("");
        daozhi1.reverse();
        var n5 = daozhi1.join("");
        console.log(n5);
        // 6. 有10个学生的成绩存在数组中，请统计大于等于平均成绩的人数。成绩直接以数组形式写在程序中，不需要用户输入。
        var chengji = [1,2,3,4,5,6,7,8,9,10];
        var sum = 0;
        for(i = 0;i <= chengji.length - 1; i ++){
            sum += chengji[i];
        }
        var avg = (sum / 10);
        var n6 = 0;
        for(j = 0 ;j <= chengji.length - 1;j ++){
            if(chengji[j] > avg){
                n6 +=1;
            }
        }
        console.log(n6);
        // 7.  将"i love javascript very much"的每个单词的第一个字母，变为大写。
        function titleCase(str) {
            var newarr,newarr1=[];
            newarr = str . toLowerCase() . split(" ");
            for(var i = 0 ; i < newarr . length ; i++){
                newarr1 . push(newarr[i][0] . toUpperCase()+newarr[i] . substring(1));
            }
            return newarr1.join(' ');
        }
        var n7 = titleCase("i love javascript very much");
        console.log(n7);
        // 8.  求一组数中的最大值和最小值，以及所在位置的下标。
        // 最大值
        function theMax(arr){
            var max = arr[0];
            var maxIndex = 0;
            for(var i= 0;i < arr.length;i++){
                if(arr[i] > max){
                    max = arr[i];
                    maxIndex = i;
                }
            }
            return max;
            return maxIndex;
        }
        // 最小值
        function theMin(arr){
            var min = arr[0];
            var minIndex = 0;
            for(var i= 0;i < arr.length;i++){
                if(min > arr[i]){
                    min = arr[i];
                    minIndex = i;
                }
            }
            return min;
            return minIndex;
        }
        // 9.  将数组用 | 或其他符号连接成一个字符串。
        arr.join("|");
        // 10.  将数组中值为 0 的项去掉，将不为 0 的值存入一个新的数组，生成新的数组。
        var arr = ['张三', 18, 0, '男', 0, 102323,'sdf'];
        //定义一个新数组
        var newArr = [];
        //遍历整个 arr
        for (var i = 0; i < arr.length; i++) {
            //将为不为0的筛出来,放入到新的数组
            if (arr[i] !== 0) {
                //方法1.
                //newArr[newArr.length] = arr[i];
                //方法2.用push() 方法压入到新数组
                newArr.push(arr[i]);
            }
        }
        console.log(newArr);
        // 11.    数组去重；
        var arr =[1,1,1,2,2,3,4,5,6,3,4,2,4,1]
        var n11 = [];
        // 找到数组里出现但是没在新数组出现的数字
        for(var i = 0;i < arr.length;i ++){
            if (n11.indexOf(arr[i]) == -1){
                n11[n11.length] = arr[i];
            }
        }
        console.log(n11);
        // 12.  数组排序；
        var arr = [3,4,1,2,6,5] ;
        arr.sort(function(a,b){
            if(a > b){
                return 1;
            }else if(a < b){
                return -1;
            }else{
                return 0;
            }
        });
        console.log(arr);
        // 13.  数组转对象；
        var arr4 =['a','a','a','b','b','c','c','c','c','d','d','d','d'] ;
        function transformToObj (arr) {
            var obj = {}
            for (var i = 0; i < arr.length; i++) {
                 if (!obj[arr[i]]) {
                     obj[arr[i]] = 1
                    } else {
                        obj[arr[i]] += 1
                    }
                }
                return obj
            }
            console.log(transformToObj(arr))
        // 14.  使用js将99乘法表输出在控制台
        var num=0;
        for(var i=1 ;i<10;i++){
        for(var j=1;j<10;j++){
            num=i*j;
            if(num/10<1){
                num="&nbsp;&nbsp;"+i*j;
            }
            if(j<=i) {
                document.write(j + "*" + i + "=" + num + "&nbsp;&nbsp;&nbsp;&nbsp;");
            }
        }
        document.write("<br>");
    }
    // 15. 买卖股票的最佳时机；给定一个数组，它的第i个元素是一支给定股票第i天的价格。
    // 如果你最多只允许完成一笔交易（即买入和卖出一支股票一次）设计一个算法来计算你所能获取的最大利润。
    // 注意：你不能再买入股票前卖出股票
    var prices = [7,1,5,3,6,4]
    var lirun = [];
    for(var i = 0;i < prices.length;i ++){
        var day1 = prices[i];
        for(j = i + 1;j < prices.length;j ++){
            lirun.push(prices[j] - prices[i]);
        }
    }
    lirun.sort(function(a,b){
            if(a < b){
                return 1;
            }else if(a > b){
                return -1;
            }else{
                return 0;
            }
        });
        console.log(lirun[0]);
    </script>
</head>
<body>
</body>
</html>